#pragma once

#include<iostream>
#include<unordered_map>
#include<functional>
#include<ctime>

using namespace std;
using task_t = function<void()>;



static int number = 0;
class TaskManger{
public:
    TaskManger()
    {
        srand(time(nullptr));
        //任务列表。。。。。
        
    }
    void InsertTask(task_t t)//插入任务,将任务插入到MAP里
    {
        tasks[number++]=t;
    }
    void Excute(int number)//执行任务
    {
        if(tasks.find(number)==tasks.end()) return;//没找到则返回
        tasks[number];
    }
    int SelectTask()//选择任务按照轮询的方法
    {
        return rand()% tasks.size();
    }
    ~TaskManger()
    {}
private:
    unordered_map<int,task_t> tasks;//将任务放到map容器里面
};
TaskManger tm;//重命名


void Worker()//子进程做自己的事情
{
    while(true)
    {
        int cmd = 0;//为什么是0？因为重定向到了标准输出里面所以是0
        int n = read(0,&cmd,sizeof(cmd));//写什么命令就读什么命令
        if(n==sizeof(cmd))
        {
            tm.Excute(cmd);//执行命令 
        }
        else if(n==0)//写端关闭，读端继续，当读到0时关闭进程
        {
            cout<<"pid:"<<getpid()<<"quit..."<<endl;
            break;
        }
        else
        {
            
        }
    }
}